import 'package:shared_preferences/shared_preferences.dart';

class SharedPreferencesTools {
  static SharedPreferences? _prefs;
  static bool _initialized = false;

  /// 初始化方法，需要在使用前调用
  static Future<void> init() async {
    if (!_initialized) {
      _prefs = await SharedPreferences.getInstance();
      _initialized = true;
    }
  }

  /// 检查初始化状态
  static void _checkInit() {
    if (!_initialized) {
      throw StateError('SharedPreferencesTools未初始化，请先调用init()方法');
    }
  }

  /// 获取一个字符串值
  static String getString(String key, {String defaultValue = ""}) {
    _checkInit();
    return _prefs?.getString(key) ?? defaultValue;
  }

  /// 存储一个字符串值
  static Future<bool> setString(String key, String value) async {
    _checkInit();
    return await _prefs!.setString(key, value);
  }

  // 添加其他类型的存取方法...
  static int getInt(String key, {int defaultValue = 0}) {
    _checkInit();
    return _prefs?.getInt(key) ?? defaultValue;
  }

  static Future<bool> setInt(String key, int value) async {
    _checkInit();
    return await _prefs!.setInt(key, value);
  }

  static bool getBool(String key, {bool defaultValue = false}) {
    _checkInit();
    return _prefs?.getBool(key) ?? defaultValue;
  }

  static Future<bool> setBool(String key, bool value) async {
    _checkInit();
    return await _prefs!.setBool(key, value);
  }

  static List<String> getStringList(String key, {List<String> defaultValue = const []}) {
    _checkInit();
    return _prefs?.getStringList(key) ?? defaultValue;
  }

  static Future<bool>? setStringList(String key, List<String> value) {
    _checkInit();
    return _prefs?.setStringList(key, value);
  }

  /// 获取底层存储的原始值（不推荐业务层直接使用，仅用于迁移等特殊场景）
  static Object? getValue(String key) {
    _checkInit();
    return _prefs?.get(key);
  }

  //删除某个key
  static Future<bool> remove(String key) async {
    _checkInit();
    return await _prefs!.remove(key);
  }

  static bool containsKey(String key) {
    _checkInit();
    return _prefs!.containsKey(key);
  }

  static Future<bool> clear() {
    _checkInit();
    return _prefs!.clear();
  }
}
